#ifndef _LOGIN_CONNECT_TASK_H_
#define _LOGIN_CONNECT_TASK_H_

#include "task.h"
#include "core/sharedata/login_data.h"

namespace qb
{
	class ThreadWrapper;

    // 连接到LoginServer的任务
    class CLoginConnectTask
        : public CTask
    {
    public:
        CLoginConnectTask();
        ~CLoginConnectTask();

    protected:
        // 启动连接线程连接LoginServer
        void StartConnecting();

		// 连接指定的server
		bool Connect(const tIPAdressPort& ipAddressPort);

		// 断开到server的连接
		void Disconnect();

		// 清理所有资源
		void Cleanup();

    protected:
        virtual void StartImpl();
        virtual void TerminateImpl();
        virtual bool IsConnectTask() { return true; }
        virtual void OnNetData(char* pRecvData, int nDataLen) {}
        virtual void OnNetStatus(int32_t status);
        virtual int32_t GetTaskTimeout() { return LOGIN_CONNECT_TIME;  }

		// 开始一个线程, 线程回调ThreadProcess
		bool StartThread();

		// 停止线程
		void StopThread();

		// 线程回调函数
		virtual bool ThreadProcess();
		static bool ThreadCallback(void* args);

        // 处理连接返回
        void OnConnect(int32_t status);

        // 超时回调函数
        void OnTimeout();

	private:
		ThreadWrapper*		m_pThread;
		unsigned int		m_uThreadId;
    };
}

#endif
